package day06;

/**
 * @author: 王丹
 * @create: 2021-07-03 10:58
 * 一个线程的输入可能非常依赖于另外一个或者多个线程的输出，此时，
 * 这个线程就需要等待依赖的线程执行完毕，才能继续执行。jdk提供了join()操作来实现这个功能。
 * 如下所示，显示了2个join()方法：
 * public final void join() throws InterruptedException;
 * public final synchronized void  join(long millis)throws InterruptedException;
 * 第1个方法表示无限等待，它会一直只是当前线程。知道目标线程执行完毕。
 * 第2个方法有个参数，用于指定等待时间，如果超过了给定的时间目标线程还在执行，
 * 当前线程也会停止等待，而继续往下执行。
 **/
public class Demo08 {
    static int num = 0;

    public static class T1 extends Thread {
        public T1(String name) {
            super(name);
        }

        @Override
        public void run() {
            System.out.println(System.currentTimeMillis() +" 线程名称:"+ Thread.currentThread().getName() + " start" + this.getName());
            for (int i = 0; i < 10; i++) {
                num++;
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(System.currentTimeMillis() +" 线程名称:"+ Thread.currentThread().getName() + " end" + this.getName());
        }

        public static void main(String[] args) throws InterruptedException {
            T1 t1 = new T1("T1");
            t1.start();
            t1.join();
            System.out.print(System.currentTimeMillis() + " 线程名称:" + Thread.currentThread().getName() + " num " + num);
        }
    }
}
